package collection;

import java.util.*;

/**
 * Map四种遍历方式
 */
public class MapFor {

    public static void main(String[] args) {

        /*
            1)containsKey 查找键是否存在
            2)keySet 获取所有的键
            3)entrySet 获取所有关系 k-v
            4)values 获取所有的值
         */

        Map map=new HashMap();
        map.put("邓超", "孙俪");
        map.put("王宝强", "马蓉");
        map.put("宋喆", "马蓉");
        map.put("刘令博", null);
        map.put(null, "刘亦菲");
        map.put("鹿晗", "关晓彤");

        //1.先取出所有的key，通过 key 取出对应的 value
        Set set = map.keySet();
        //1)增强for
        System.out.println("====第一种方式====");
        for (Object key : set) {
            System.out.println(key + ":" + map.get(key));
        }
        //2)迭代器
        System.out.println("====第二种方式====");
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next + ":" + map.get(next));
        }

        //2.把所有的values 取出
        Collection values = map.values();
        //这里可以使用所有的Collections使用的遍历方法
        //1) 增强 for
        System.out.println("---取出所有的 value 增强 for----");
        for (Object value : values) {
            System.out.println(value);
        }
        //2)迭代器
        System.out.println("---取出所有的 value 迭代器----");
        Iterator iterator2 = values.iterator();
        while (iterator2.hasNext()) {
            Object value = iterator2.next();
            System.out.println(value);
        }

        //3.通过EntrySet 来获取 k-v
        Set entrySet = map.entrySet();// EntrySet<Map.Entry<K,V>>
        //(1) 增强 for
        System.out.println("----使用 EntrySet 的 for 增强(第 3 种)----");
        for (Object entry : entrySet) {
            //将 entry 转成 Map.Entry
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + "-" + m.getValue());
        }
        //(2) 迭代器
        System.out.println("----使用 EntrySet 的 迭代器(第 4 种)----");
        Iterator iterator3 = entrySet.iterator();
        while (iterator3.hasNext()) {
            Object entry = iterator3.next();
            //向下转型 Map.Entry
            //System.out.println(next.getClass());//HashMap$Node-实现-> Map.Entry (getKey,getValue)
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + "-" + m.getValue());
        }

    }
}
